const xlsx = require("node-xlsx");
const path = require("path");
const uuid = require("uuid");
const user = require("../../database/user");
const md5 = require("md5");

module.exports = async (req,res,next)=>{

  if(req.power !== 0){
    res.send({
      code:4,
      msg:"权限不够"
    })
    return;
  }

  // 根据上传的文件信息，找到指定的xlsx文件，并解析成数据
  const fileData = xlsx.parse( path.join(__dirname, "..", "..", req.files[0].path) )[0].data;
  // 准备存放可插入数据
  const dbArr = [];
  // 准备存放重复数据（手机号）
  const repeatMsg = [];
  // 遍历从xlsx文件中解析出的数据，处理成数据库能接收的格式
  for(let i=1; i<fileData.length; i++){
    // 单条数据
    const userMsg = fileData[i];
    // 准备判断必传参数
    const tel = userMsg[0] + "";
    const power = userMsg[4]-0;
    const tId = userMsg[5];
    if(!tel || power===undefined || !tId){
      res.send({
        code:3,
        msg:"缺少必传参数：tel, power, tId，请检查表格内容"
      })
      return;
    }
    // 判断手机号是否重复，如果重复，记录，导入完成后给出提示，xxx重复
    const userData = await user.find({ tel });
    if(userData.length > 0){
      repeatMsg.push(tel);
      continue;
    }
    // 不重复，再push
    dbArr.push({
      uId: "user-" + uuid.v1(),
      tel,
      password: md5(tel.slice(-6)),
      uName: userMsg[1] || "",
      age: userMsg[2]-0 || 18,
      sex: userMsg[3] || "",
      power,
      tId,
      regTime: Date.now(),
      lastLoginTime: [],
      avatar: "",
      token: ""
    })
  }
  try {
    // 插入到数据库
    await user.insertMany(dbArr);
    res.send( {
      code:1,
      msg:"导入成功",
      repeatData: {
        msg: "重复手机号",
        data: repeatMsg
      }
    } );
  } catch (error) {
    res.send( {
      code:2,
      msg:"导入失败"
    } );
  }
}
